package org.example.memora.configur;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 异步任务配置类
 * 用于替代 Spring 默认的 SimpleAsyncTaskExecutor，提升异步处理性能
 */
@Configuration
public class AsyncConfig implements WebMvcConfigurer {

    /**
     * 配置 MVC 异步支持
     * 设置自定义的 AsyncTaskExecutor 来处理异步请求
     */
    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        // 创建线程池任务执行器
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();

        // 设置核心线程数（初始化时创建的线程数量）
        taskExecutor.setCorePoolSize(5);

        // 设置最大线程数（当队列满时，线程池可扩容至此值）
        taskExecutor.setMaxPoolSize(10);

        // 设置任务队列容量（等待执行的任务数）
        taskExecutor.setQueueCapacity(100);

        // 设置线程名称前缀，便于日志追踪
        taskExecutor.setThreadNamePrefix("async-executor-");

        // 初始化线程池
        taskExecutor.initialize();

        // 将自定义的线程池任务执行器设置给 Spring MVC 的异步支持
        configurer.setTaskExecutor(taskExecutor);
    }
}

